// 导入 http 模块，用于创建服务器
const http = require('http');

// 导入 querystring 模块，用于解析表单数据
const querystring = require('querystring');

// 创建一个 HTTP 服务器
const server = http.createServer((req, res) => {
  // 判断访问的路径和请求方式是否为：GET /login
  if (req.url === '/login' && req.method === 'GET') {

    // 设置响应头，告知浏览器返回的是 HTML 页面，并使用 UTF-8 编码
    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });

    // 返回一个简单的登录表单
    res.end(`
      <form action="/login" method="POST">
        用户名：<input name="user"><br>
        密码：<input name="pass" type="password"><br>
        <button type="submit">登录</button>
      </form>
    `);

  // 判断是否为 POST 提交到 /login
  } else if (req.url === '/login' && req.method === 'POST') {

    // 用于临时存放接收到的请求体数据
    let body = '';

    // 监听 data 事件：当有数据片段传入时触发
    // 注意：POST 请求的数据通常不是一次性到达，而是分多次传输
    req.on('data', chunk => {
      // chunk 是二进制 Buffer 数据，将它拼接成完整字符串
      body += chunk;
    });

    // 监听 end 事件：表示所有数据都接收完毕
    req.on('end', () => {
      // 使用 querystring.parse() 将 URL 编码格式的字符串转为对象
      // 例如：user=Tom&pass=1234  →  { user: 'Tom', pass: '1234' }
      const formData = querystring.parse(body);

      // 设置响应头，返回普通文本，防止中文乱码
      res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });

      // 向客户端返回响应内容
      res.end(`登录成功！欢迎 ${formData.user}`);
    });

  } else {
    // 其他路径返回 404 提示
    res.writeHead(404, { 'Content-Type': 'text/html; charset=utf-8' });
    res.end(`
      404 页面不存在
      <a href='/login'>去登录页</a>
      `);
  }
});

// 启动服务器，监听 3000 端口
server.listen(3000, () => {
  console.log('服务器运行在 http://localhost:3000');
});
